package com.mengma.ec.service.impl.portal;

import com.mengma.ec.commons.Const;
import com.mengma.ec.commons.ServerResponse;
import com.mengma.ec.dao.CartMapper;
import com.mengma.ec.dao.ProductMapper;
import com.mengma.ec.entity.Cart;
import com.mengma.ec.entity.Product;
import com.mengma.ec.service.portal.ICartService;
import com.mengma.ec.service.portal.IUserService;
import com.mengma.ec.util.BigDecimalUtil;
import com.mengma.ec.vo.CartProductVo;
import com.mengma.ec.vo.CartVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: xixi
 * @Date: 2018/9/20 09:21
 * @Description:
 */
@Service("iCartService")
public class CartServiceImpl implements ICartService {

    @Autowired
    private CartMapper cartMapper;

    @Autowired
    private ProductMapper productMapper;

    //1.购物车List列表
    @Override
    public ServerResponse<CartVo> findAllList(Integer userId) {

        CartVo cartVo = new CartVo();
        List<CartProductVo> cartProductVoList = new ArrayList<>();
        BigDecimal cartTotalPrice = new BigDecimal("0");

        // 逻辑1.1 通过userid 查询当前用户购物车信息
        List<Cart> cartlist = cartMapper.findListByUserId(userId);

        // 逻辑1.2 通过每一项cartItem的product_id获取product商品信息
        for (Cart cartItem : cartlist) {
            // 定义返回的单个 对象数据
            CartProductVo cartProductVo = new CartProductVo();

            // 代表购物车每一项对应的具体商品信息的唯一Id
            Integer product_id = cartItem.getProductId();
            Integer id = cartItem.getId();

            cartProductVo.setId(cartItem.getId());
            cartProductVo.setProductId(cartItem.getProductId());
            cartProductVo.setUserId(userId);
            cartProductVo.setQuantity(cartItem.getQuantity());

            // 具体的购物车单项商品信息
            Product product = productMapper.selectByPrimaryKey(product_id);

            cartProductVo.setProductName(product.getName());
            cartProductVo.setProductSubtitle(product.getSubtitle());
            cartProductVo.setProductPrice(product.getPrice());
            cartProductVo.setProductStock(product.getStock());
            cartProductVo.setProductMainImage(product.getMainImage());
            cartProductVo.setProductStatus(product.getStatus());

            // 判断用户购物车购买数量 是否 小于或等于 库存数量
            if (cartItem.getQuantity() <= product.getStock()) {
                // 返回 ok
                cartProductVo.setLimitQuantity(Const.Cart.LIMIT_NUM_SUCCESS);
            } else {
                // 返回 失败
                cartProductVo.setLimitQuantity(Const.Cart.LIMIT_NUM_FAIL);
            }

            // 设置 当前商品价格
            cartProductVo.setProductTotalPrice(BigDecimalUtil.mul(cartItem.getQuantity(), product.getPrice().doubleValue()));
            // 设置是否选中
            cartProductVo.setProductChecked(cartItem.getChecked());

            // 如果当前 物品为 选中状态，叠加当前 物品价格到总价格
            if (cartItem.getChecked() == 1) {
                cartTotalPrice = BigDecimalUtil.add(cartTotalPrice.doubleValue(), cartProductVo.getProductTotalPrice().doubleValue());
            }
            cartProductVoList.add(cartProductVo);
        }

        // 获取当前用户选中购物车物品数量
        int checkCount = cartMapper.findCheckCount(userId);

        boolean checked = false;

        //代表全选
        if (cartlist.size() == checkCount) {
            checked = true;
        }

        //最终设置 要返回的数据
        cartVo.setCartProductVoList(cartProductVoList);
        cartVo.setAllChecked(checked);
        cartVo.setCartTotalPrice(cartTotalPrice);

        return ServerResponse.createBySuccess(cartVo);
    }

    //2.购物车添加商品
    @Override
    public ServerResponse<CartVo> add(Integer userId,Integer productId,Integer count) {

        //判断购物车当前是否有要存取的商品
        //通过userid 与productid查询购物车mmall_count
        Cart cart = cartMapper.findCartByUserIdAndProductId(userId,productId);

        //如果没有，添加即可/
        if (cart == null) {
            Cart cart_new = new Cart();
            cart_new.setUserId(userId);
            cart_new.setProductId(productId);
            cart_new.setQuantity(count);
            cart_new.setChecked(1);
            cartMapper.insert(cart_new);
        //如果有就把已有的商品数据整理quantity更新
        }else {
            cart.setQuantity(cart.getQuantity() + count);
            cartMapper.updateByPrimaryKey(cart);
        }

        //返回购物车前台页面所需所有数据
        ServerResponse response = this.findAllList(userId);
        return response;
    }

    //3.更新购物车某个产品数量
    @Override
    public ServerResponse<CartVo> updata(Integer userId, Integer productId, Integer count) {

        int i = cartMapper.updateQuantityByProductIdAndUserId(userId,productId,count);

        if (i > 0 ){
            //返回购物车前台页面所需所有数据
            ServerResponse response = this.findAllList(userId);
            return response;
        }
        return ServerResponse.createByErrorMessage("更新失败");
    }

    @Override
    public ServerResponse<CartVo> delete(Integer userId, String productIds) {

        String[] split = productIds.split(",");
        int i = cartMapper.deleteByproductIds(userId,split);
        if (i > 0 ){
            //返回购物车前台页面所需所有数据
            ServerResponse response = this.findAllList(userId);
            return response;
        }

        return ServerResponse.createByErrorMessage("删除失败");

    }


}
